iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
自我挑戰組

用Unity製作連線遊戲系列 第 14

Create Unity Cloud Build Through API

  • 分享至 

  • xImage
  •  

專案之後的建置要用Unity Cloud Build(UCB),趁著現在被一些不確的Mirror寫法卡住時,先花點時間把一些之後建置的瑣事處理一下。

Using Unity Cloud Build API

利用Dockerfile進行處理,在由外部給私密的參數,則可以利用UCB的API就進行設定或是資料取得。

FROM alpine:latest as create-project

ARG ORG_ID
ARG API_KEY

RUN apk update && apk add curl
RUN curl \
    -X GET \
    -H "Authorization: Basic ${API_KEY}" \
    "https://build-api.cloud.unity3d.com/api/v1/orgs/${ORG_ID}/billingplan"

然而在使用其它API時,特別是使用POST和PUT進行產生和更新時,會碰到拿取Json Data時的問題。而這個問題,找了網路上很多討論,但不管怎麼試,就是解決不了。先不談論過程,其實目地是很單純的,利用UCB API在專案開始的時候建立buildtarget還有給予所有相關的設定,以方便之後進行build時用。就是這麼簡單的想法,但是碰到了產生或是更新的需求時,在curl裡的data參數,就是需要放入json。單然可以直接放入一整串的json,但這串有可能會有些變數,在設定上較有彈性。就是這樣的想法,弄了老半天,都沒有成功。接下來就來談談過程。

相當然爾,不了解的部份都是查詢google的文章。而找到的文章主要是用EOF也就是here-doc來進行。

純以在terminal裡執行,這看起來很像是解決方案,但在Dockerfile裡執行時,就不是很清楚前面加上了RUN之後要怎麼進行,因為EOF似乎並不吃後面換行用的斜線。所以針對這個問題又再度查詢解決方案

這個方案看起來是用一個function將EOF裡的json包起來

my_function() {
  cat << EOF
{
  "key": "value",
}
EOF
}

然後試過各式各樣的方式,就是沒有辦法將這段塞到curl的data參數裡。想以就想那直接以檔案的方式進入到curl裡,參考了這篇

也是一樣,完全無法成功。常碰到

這是討論裡的一行quote

Putting JSON strings in shell commands like curl is a notorious pain in the neck, as you are discovering.

怎麼試就是不行,所以就想那換個shell,直接用powershell來處理

FROM mcr.microsoft.com/powershell:lts-alpine-3.10

找到了Invoke-WebRequest,應該可以用它來代替curl,沒想到怎麼試都會出現

{"error":"The requested object was not found."}

結果,這篇討論裡有提到第六版後就被移掉,而用Docker拿的是第七版,所以沒有這個cmdlet

但又回到了官方的文件裡第七版也確實是還有這個cmdlet。

只是有歸有,一樣是不能用。試了老半天還是有問題。得到的結論就是json資料在bash或是powershell都很難用。看樣子,還是直接用nodejs可能不會浪費這麼久的時間。只能說今天非常的不適合開發。


上一篇
Making The Flow
下一篇
Simulte Match Service in Go
系列文
用Unity製作連線遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言